package com.woniu.order.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.order.dto.ApplyOrderDto;
import com.woniu.order.pojo.ZfChanpin;
import com.woniu.order.service.ZfChanpinService;
import com.woniu.order.mapper.ZfChanpinMapper;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author HP
* @description 针对表【zf_chanpin(产品表，包含产品信息、库存和销售单价等信息)】的数据库操作Service实现
* @createDate 2024-11-23 15:30:00
*/
@Service
public class ZfChanpinServiceImpl extends ServiceImpl<ZfChanpinMapper, ZfChanpin>
    implements ZfChanpinService{

    /**
     * 减库存
     * @param productList
     */
    @Override
    public void reduce(List<ApplyOrderDto.ProductDto> productList) {
        for (ApplyOrderDto.ProductDto product : productList) {
            // 获取当前产品的库存信息
            ZfChanpin zfChanpin = this.getById(product.getProductId());
            if (zfChanpin != null) {
                // 获取原库存数量
                Integer currentStockQuantity = zfChanpin.getStockQuantity();
                // 获取需要减去的数量
                Integer salesQuantity = product.getSalesQuantity();

                // 计算剩余库存
                if (currentStockQuantity != null && salesQuantity != null && currentStockQuantity >= salesQuantity) {
                    // 扣减库存
                    zfChanpin.setStockQuantity(currentStockQuantity - salesQuantity);
                    // 更新库存
                    this.updateById(zfChanpin);
                } else {
                    // 如果库存不足，可以抛出异常或做其他处理
                    throw new RuntimeException("库存不足，产品ID：" + product.getProductId());
                }
            } else {
                // 如果没有找到对应的产品记录，可以抛出异常或做其他处理
                throw new RuntimeException("产品ID不存在：" + product.getProductId());
            }
        }
    }
}